//对于axios进行二次封装
import axios from "axios";
import store from "@/store";
import { Message } from 'element-ui';
import { showFullScreenLoading, tryHideFullScreenLoading, errorHideFullScreenLoading } from '@/util/loading';

//底下的代码也是创建axios实例
let request = axios.create({
    //基础路径
    // baseURL: "http://localhost:5555",
    baseURL: "/test",
    //请求不能超过5S
    timeout: 500000,
});

//请求拦截器----在项目中发请求（请求没有发出去）可以做一些事情
request.interceptors.request.use((config) => {
    showFullScreenLoading();
    if (store.state.user.token) {
        // let each request carry token
        // ['X-Token'] is a custom headers key
        // please modify it according to the actual situation
        config.headers['Authorization'] = store.state.user.token;
    }
    console.log('config.data---:   ' + config.data);
    if (config.url == '/api/File/UploadPostFile') {
        debugger
        var a = config.data
        debugger
    }
    return config;
});

//响应拦截器----当服务器手动请求之后，做出响应（相应成功）会执行的
request.interceptors.response.use(
    (res) => {

        //刷新token
        if (res.headers.refreshtoken) {
            debugger
            store.dispatch("RefreshFun", { token: res.headers.refreshtoken, tokenExpiresTime: res.headers.tokenexpirestime });
        }
        tryHideFullScreenLoading();
        if (res.headers['content-type'] == 'application/json; charset=utf-8') {
            return res.data;
        }
        //相应成功做的事情
        return res;
    },
    (error) => {
        var res = error.response;
        console.log('err' + error) // for debug
        errorHideFullScreenLoading();
        var msg = "";
        if (error.code == "ECONNABORTED") {
            msg = "请求超时！";//error.message;
        }
        else if (res.status == 401) {
            msg = "登录账号已过期！"
        } else {
            msg = res.data.errorMsg
        }
        Message({
            message: msg,
            type: 'error',
            duration: 5 * 1000//显示时间, 毫秒。设为 0 则不会自动关闭
        })
        // return Promise.resolve(error.response.data);
        return Promise.reject(error);
        // if (error.response) {
        //     if (error.response.status === 401) {
        //         // 这种情况一般调到登录页
        //     } else if (error.response.status === 403) {
        //         // 提示无权限等
        //     } else {
        //         // 其他错误处理
        //     }
        // }
        // return Promise.reject(error.response.data)
        // return Promise.reject(error);
    }
);
//最终需要对外暴露（不对外暴露外面模块没办法使用）
//这里的代码是暴露一个axios实例
export default request;
